package org.alesv.entranceExams.web.taglib;

import java.util.Map;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspTagException;
import javax.servlet.jsp.tagext.TagSupport;

/**
 * Guarda en el contexto un map que contiene todas las propiedades de una clase de constantes..
 */
public class ConstantsTag extends TagSupport {

    /**
     * Identificador para la serialización.
     */
    private static final long serialVersionUID = 4561449630941803095L;

    /**
     * Nombre de la clase de constantes.
     */
    private String            clazz;

    /**
     * Nombre de la instancia de la clase.
     */
    private String            instanze;

    /**
     * Establece el nombre de la instancia de la clase.
     * 
     * @param instanze
     *            Nombre de la instancia de la clase.
     */
    public final void setInstanze(final String instanze) {
        this.instanze = instanze;
    }

    /**
     * Establece el nombre de la clase.
     * 
     * @param clazz
     *            Nombre de la instancia de la clase.
     */
    public final void setClazz(final String clazz) {
        this.clazz = clazz;
    }

    @Override
    public final int doStartTag() throws JspException {
        if ((clazz != null) && (instanze != null)) {
            Map<String, Object> constants = null;
            try {
                constants = Utils.getClassConstants(clazz);
                this.pageContext.setAttribute(instanze, constants, 1);
            } catch (Exception e) {
                throw new JspTagException("Error al crear la clase: " + clazz);
            }
        }
        return 0;
    }
}
